/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloAlumno;
import com.ipartek.formacion.gestformwww.modelo.beans.AlumCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.Alumno;
import com.ipartek.formacion.gestformwww.modelo.beans.Asistencia;
import com.ipartek.formacion.gestformwww.modelo.beans.Calificacion;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Sara
 */
public class GuardarAlumnoAccion implements Accion {

   
    private final String crearalumnos = "crear-alumno-accion";
    private final String visualizaralumnos = "visualizar-alumno-accion";

    /**
     * Descripción: ejecuta la acción de guardado y modificado del curso
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        Boolean crearalumno = true;
         AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        String aluNIF;
        String aluNSS;
        String aluTlf1;
        String aluTlf2;
        String aluMail;
        String aluDir;
        String aluLocalidad;
        String aluFechNac;
        String aluNom;
        String aluApe1;
        String aluApe2;
        String aluObserv;
        String empId;
        String empIdNuevo;
        String proId;
        String proIdNuevo;

        Alumno alumno = new Alumno();
        ArrayList<String> errorm = new ArrayList<String>();
        ArrayList<String> mensajes = new ArrayList<String>();
        int id = -1;
        ArrayList<Asistencia> asistencias = new ArrayList<Asistencia>();
        AlumCurso alumnCurso = new AlumCurso();
        ArrayList<Calificacion> calificaciones = new ArrayList<Calificacion>();
        ModeloAlumno modelo = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");

        AccionRouter router = null;
        AccionRouter routerAuxiliar = null;
        String aleatorio = (String) sesion.getAttribute("aleatorioCrearAlumno");

        if (aleatorio != null) {
            if (request.getParameter("aleatorioCrearAlumno") != null) {
                if (request.getParameter("aleatorioCrearAlumno").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crease un curso (ya se creo anteriormente)
                    crearalumno = false;
                } else {
                    sesion.setAttribute("aleatorioCrearCurso", request.getParameter("aleatorioCrearCurso"));
                }
            }
        } else {
            sesion.setAttribute("aleatorioCrearCurso", request.getParameter("aleatorioCrearCurso"));
        }

        if (sesion.getAttribute("usuario") != null && request.getParameter("idCurso") != null && request.getMethod().equalsIgnoreCase("POST")) {
            aluNIF = (String) request.getParameter("aluNIF");
            aluNSS = (String) request.getParameter("aluNSS");
            aluTlf1 = (String) request.getParameter("aluTlf1");
            aluTlf2 = (String) request.getParameter("aluTlf2");
            aluMail = (String) request.getParameter("aluMail");
            aluDir = (String) request.getParameter("aluDir");
            aluLocalidad = (String) request.getParameter("aluLocalidad");
            aluFechNac = (String) request.getParameter("aluFechNac");
            aluNom = (String) request.getParameter("aluNom");
            aluApe1 = (String) request.getParameter("aluApe1");
            aluApe2 = (String) request.getParameter("aluApe2");
            aluObserv = (String) request.getParameter("aluObserv");
            empId = (String) request.getParameter("empId");
            empIdNuevo = (String) request.getParameter("empNom");
            proId = (String) request.getParameter("proId");
            proIdNuevo = (String) request.getParameter("proNom");

            //FALTAN LAS VALIDACIONES
            if (request.getParameter("idAlumno") != null) {
                alumno.setAluId(Integer.parseInt(request.getParameter("idAlumno")));
            }

            if (!Verificador.esCorrecto(aluNom)) {
                errorm.add("error-nombre-incorrecto");
            } else {
                alumno.setAluNom(aluNom);
            }

            if (aluFechNac.trim().isEmpty()) {
                errorm.add("error-fecha-nacimiento-vacio");
            } else {
                alumno.setAluFechNac(aluFechNac);
            }

            if (!Verificador.esCorrecto(aluTlf1)) {
                errorm.add("error-tlf1-incorrecto");
            } else {
                alumno.setAluTlf1(aluTlf1);
            }

            if (!Verificador.esCorrecto(aluTlf2)) {
                errorm.add("error-tlf2-incorrecto");
            } else {
                alumno.setAluTlf2(aluTlf2);
            }

            if (!Verificador.esCorrecto(aluMail)) {
                errorm.add("error-mail-incorrecto");
            } else {
                alumno.setAluMail(aluMail);
            }

            if (!Verificador.esCorrecto(aluDir)) {
                errorm.add("error-direccion-incorrecto");
            } else {
                alumno.setAluDir(aluDir);
            }

            if (!Verificador.esCorrecto(aluLocalidad)) {
                errorm.add("error-localidad-incorrecto");
            } else {
                alumno.setAluLocalidad(aluLocalidad);
            }

            if (!Verificador.esCorrecto(aluNom)) {
                errorm.add("error-nombre-incorrecto");
            } else {
                alumno.setAluNom(aluNom);
            }

            if (!Verificador.esCorrecto(aluApe1)) {
                errorm.add("error-apellido1-incorrecto");
            } else {
                alumno.setAluApe1(aluApe1);
            }

            if (!Verificador.esCorrecto(aluApe2)) {
                errorm.add("error-apellido2-incorrecto");
            } else {
                alumno.setAluApe2(aluApe2);
            }

            alumno.setAluObserv(aluObserv);

            if (!Verificador.numeroValido(empId, true)) {
                errorm.add("error-empId-incorrecto");
            } else{
                alumno.setEmpId(empId);
            }

            if (!Verificador.caracteresCorrectos(empIdNuevo)) {
                errorm.add("error-empresa-incorrecto");
            } else {
                if (empId.trim().isEmpty()) {
                    alumno.setEmpId(new Integer(empIdNuevo));
                } else {
                    alumno.setEmpId(new Integer(empId));
                }
            }

            if (!Verificador.numeroValido(proId, true)) {
                errorm.add("error-proId-incorrecto");
            } else if(proId!=null){
                alumno.setProId(proId);
            }

            if (!Verificador.caracteresCorrectos(proIdNuevo)) {
                errorm.add("error-procedencia-incorrecto");
            } else {
                if (empId.trim().isEmpty()) {
                    alumno.setProId(new Integer(proIdNuevo));
                } else {
                    alumno.setProId(new Integer(proId));
                }
            }

            if (errorm.isEmpty() && crearalumno) {
                if (request.getParameter("idAlumno") == null) {
                    try {
                        id = modelo.crearAlumno(alumno);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                } else {
                    try {
                        //curso.setCurId(Integer.parseInt(request.getParameter("idCurso"))); VA ARRIBA
                        id = modelo.modificarAlumno(alumno);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                }
                if (id < 0) {
                    try {
                        routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(crearalumnos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                  
                    errorm.add("error-alumno-nocreado");
                    sesion.setAttribute("errores", errorm);
                } else {
                    request.setAttribute("idAlumno", id);
                    request.setAttribute("idCurso", request.getParameter("idAlumno"));
                    //request.setAttribute("visualizaalumno", alumno);
                    mensajes.add("mensaje-guardar-alumno");
                    sesion.setAttribute("mensajes", mensajes);
                    //alumno.setAluId(id);
                    try{
                          routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumnos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
               
                }
            } else {
                if (crearalumno) {
                    sesion.setAttribute("errores", errorm);
                    if (request.getParameter("idCurso") == null) {
                         try{
                          routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(crearalumnos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                        
                    
                    } else {
                       try{
                          routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumnos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    }
                } else {
                    // Falta la llamada al metodo de la clase abstracta AccionCurso
                    request.setAttribute("contenido", "lista-alumnos");
                }
            }
            router = routerAuxiliar;
        } else {
            router = new AccionRouter("inicio");
        }
        return router;
    }

    
}
